/*
 * Unique Paths II
Follow up for "Unique Paths":

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
The total number of unique paths is 2.
 */
package com.xinpan.exercise;

public class UniquePathWithObstacles {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // Start typing your Java solution below
        // DO NOT write main() function
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        
        int[][] map = new int[m][n];
        int v = 1;
        for(int i = 0; i < m; i++)
        {
            if(obstacleGrid[i][0] == 1)
                v = 0;
            map[i][0] = v;
        }
        v = 1;
        for(int i = 0; i < n; i++)
        {
            if(obstacleGrid[0][i] == 1)
                v = 0;
            map[0][i] = v;
        }
        
        for(int i = 1; i < m; i++)
        {
            for(int j = 1; j < n; j++)
            {
                if(obstacleGrid[i][j] == 1)
                {
                    map[i][j] = 0;
                }
                else
                    map[i][j] = map[i-1][j] + map[i][j-1];
            }
        }
        return map[m-1][n-1];

    }
}
